#![cfg_attr(
    all(not(debug_assertions), target_os = "windows"),
    windows_subsystem = "windows"
)]

use tauri::{Manager, SystemTrayEvent};

use app::init_tauri::{create_system_tray, tray_click_handle, tray_menu_item_click_handle};

use app::invoke::{
    __cmd__hello_fn, // 这里要注意一下导入名
    __cmd__invoke_fn,
    hello_fn,
    invoke_fn,
};

#[allow(dead_code)]
fn main() {
    let app = tauri::Builder::default()
        .invoke_handler(tauri::generate_handler![hello_fn, invoke_fn,]) // 提供命令列表(供 js 调用的 rust 函数)
        .system_tray(create_system_tray()) // 创建托盘
        .on_system_tray_event(|app, event| match event {
            SystemTrayEvent::MenuItemClick { ref id, .. } => {
                tray_menu_item_click_handle(app, &event, id.as_str());
            }
            SystemTrayEvent::LeftClick { .. } => {
                tray_click_handle(app);
            }
            _ => {}
        })
        .setup(|_app| {
            // setup 钩子
            #[cfg(debug_assertions)] // 只在调试中包含此代码
            {
                println!("{}", "setup run...");
                let window = _app.get_window("main").unwrap();
                window.set_focus().unwrap();
                // 打开控制台
                window.open_devtools();
            }
            Ok(())
        });

    app.run(tauri::generate_context!()) // 读取 `tauri.conf.json` 中的 `build.distDir` 并运行 tauri
        .expect("运行 tauri 应用程序时出错");
}
